Cancel menus when they are grab-shadowed by something thats not a submenu.
authorMatthias Clasen <mclasen@redhat.com>
Mon, 27 Jun 2005 17:36:34 +0000 (17:36 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Mon, 27 Jun 2005 17:36:34 +0000 (17:36 +0000)
2005-06-27  Matthias Clasen  <mclasen@redhat.com>

        * gtk/gtkmenu.c (gtk_menu_grab_notify): Cancel menus when
        they are grab-shadowed by something thats not a
        submenu.  (#145416, Euan MacGregor)

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-8
gtk/gtkmenu.c

index 9ae260b00b0e22646c8ceadf390d3842480fecff..159f002e03d6639f32ca72e262cddcd2d1e952fd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2005-06-27  Matthias Clasen  <mclasen@redhat.com>
+
+       * gtk/gtkmenu.c (gtk_menu_grab_notify): Cancel menus when 
+       they are grab-shadowed by something thats not a 
+       submenu.  (#145416, Euan MacGregor)
+
 2005-06-27  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtk[hv]ruler.c (gtk_[hv]ruler_draw_ticks): 
index 9ae260b00b0e22646c8ceadf390d3842480fecff..159f002e03d6639f32ca72e262cddcd2d1e952fd 100644 (file)
@@ -1,3 +1,9 @@
+2005-06-27  Matthias Clasen  <mclasen@redhat.com>
+
+       * gtk/gtkmenu.c (gtk_menu_grab_notify): Cancel menus when 
+       they are grab-shadowed by something thats not a 
+       submenu.  (#145416, Euan MacGregor)
+
 2005-06-27  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtk[hv]ruler.c (gtk_[hv]ruler_draw_ticks): 
index 9ae260b00b0e22646c8ceadf390d3842480fecff..159f002e03d6639f32ca72e262cddcd2d1e952fd 100644 (file)
@@ -1,3 +1,9 @@
+2005-06-27  Matthias Clasen  <mclasen@redhat.com>
+
+       * gtk/gtkmenu.c (gtk_menu_grab_notify): Cancel menus when 
+       they are grab-shadowed by something thats not a 
+       submenu.  (#145416, Euan MacGregor)
+
 2005-06-27  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtk[hv]ruler.c (gtk_[hv]ruler_draw_ticks): 
index a1eae149b3473a9c5879ced42fc4a48b16d70126..4096511b9db966192b9c35a2a64ec318a0d8ef0b 100644 (file)
@@ -175,6 +175,8 @@ static gboolean gtk_menu_leave_notify      (GtkWidget        *widget,
                                            GdkEventCrossing *event);
 static void     gtk_menu_scroll_to         (GtkMenu          *menu,
                                            gint              offset);
+static void     gtk_menu_grab_notify       (GtkWidget        *widget,
+                                           gboolean          was_grabbed);
 
 static void     gtk_menu_stop_scrolling        (GtkMenu  *menu);
 static void     gtk_menu_remove_scroll_timeout (GtkMenu  *menu);
@@ -501,6 +503,7 @@ gtk_menu_class_init (GtkMenuClass *class)
   widget_class->style_set = gtk_menu_style_set;
   widget_class->focus = gtk_menu_focus;
   widget_class->can_activate_accel = gtk_menu_real_can_activate_accel;
+  widget_class->grab_notify = gtk_menu_grab_notify;
 
   container_class->remove = gtk_menu_remove;
   container_class->get_child_property = gtk_menu_get_child_property;
@@ -4403,5 +4406,16 @@ gtk_menu_get_for_attach_widget (GtkWidget *widget)
   return list;
 }
 
+static void
+gtk_menu_grab_notify (GtkWidget *widget,
+                     gboolean   was_grabbed)
+{
+  if (!was_grabbed)
+    {
+      if (!GTK_IS_MENU (gtk_grab_get_current ()))
+       gtk_menu_shell_cancel (GTK_MENU_SHELL (widget));
+    }
+}
+
 #define __GTK_MENU_C__
 #include "gtkaliasdef.c"